package com.droid.persistor.mapper;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import oracle.jdbc.OracleTypes;

import com.droid.persistor.dao.Gasto;
import com.droid.persistor.dao.Objetivo;
import com.droid.persistor.dao.Recordatorio;
import com.droid.persistor.dao.Usuario;
import com.droid.persistor.jdbc.DatabaseConnection;

public class ObjetivoMapper extends DatabaseConnection{

public void altaObjetivo(Objetivo obj){

	Connection conn = getConnection();
	CallableStatement cs;

	try {
	cs = conn.prepareCall("begin  PCK_OBJETIVOS.AGREGAR(?,?,?,?,?); end;");
	cs.setString(1,obj.getNombre());
	cs.setString(2, obj.getFfinicio() );
	cs.setString(3,  obj.getFfin() );
	cs.setFloat(4,  (Float) obj.getMonto());
	cs.setInt(5, (Integer) obj.getIdUsuario());
	cs.execute();
	
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	 finally {
		closeStatement();
	}

	
}	

public void deleteObjetivo(Objetivo obj){
 
	Connection conn = getConnection();
	CallableStatement cs;

	try {
	cs = conn.prepareCall("begin PCK_OBJETIVOS.ELIMINAR(?); end;");
	cs.setInt(1, (Integer) obj.getIdObjetivo());
	cs.execute();
	
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	 finally {
		closeStatement();
	}

	
}	

public String[] check_Objetivo(Number IdUsuario){
	String result[] = new String[3];

	Connection conn = getConnection();

	CallableStatement cs;

	try {
		cs = conn.prepareCall("begin ? := PCK_OBJETIVOS.CHECK_STATUS(?,?,?); end;");
		cs.registerOutParameter(1, OracleTypes.VARCHAR);
		cs.setInt(2, (Integer) IdUsuario);
		cs.registerOutParameter(3, OracleTypes.FLOAT);
		cs.registerOutParameter(4,OracleTypes.FLOAT);
		cs.execute();
		result[0]=cs.getString(1);
		result[1]=cs.getString(3);
		result[2]=cs.getString(4);
		
		return result;
		
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

	return null;	
	
}

public void modificarObjetivo(Objetivo obj){
	Connection conn = getConnection();
	CallableStatement cs;

	try {
	cs = conn.prepareCall("begin PCK_OBJETIVOS.MODIFICAR(?,?,?,?,?); end;");
	cs.setString(1,obj.getNombre());
	cs.setString(2,  obj.getFfinicio() );
	cs.setString(3,  obj.getFfin() );
	cs.setFloat(4, obj.getMonto());
	cs.setInt(5, (Integer) obj.getIdObjetivo());
	cs.execute();
	
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	 finally {
		closeStatement();
	}

}

public ArrayList<Objetivo> getOjetivosUsuario(Number IdUsuario){
	Connection conn = getConnection();
	ArrayList<Objetivo> objetivos = new ArrayList();

	CallableStatement cs;

	try {
	cs = conn.prepareCall("begin ? := PCK_OBJETIVOS.GET_OBJETIVOS_USUARIO(?); end;");
	cs.registerOutParameter(1, OracleTypes.CURSOR);
	cs.setInt(2, (Integer) IdUsuario);
	cs.execute();
	ResultSet rs = (ResultSet) cs.getObject(1);
	if (rs != null) {
		while (rs.next()) {
			Objetivo obj = new Objetivo();
			
			obj.setIdObjetivo(rs.getInt("IDOBJETIVO"));
			obj.setNombre(rs.getString("NOMBRE"));
			obj.setFfinicio(rs.getString("FINICIO"));
			obj.setFfin(rs.getString("FFIN"));
			obj.setMonto(rs.getFloat("MONTO"));
			obj.setIdUsuario(rs.getInt("IDUSUARIO"));
			
			objetivos.add(obj);
			
		}
		rs.close();
		return objetivos;
	}
	} catch (SQLException e) {

		e.printStackTrace();
	} finally {
		closeStatement();
	}
	return null;
}

public Objetivo getOjetivoUsuario(Number IdUsuario){
	Connection conn = getConnection();
	
	CallableStatement cs;

	try {
	cs = conn.prepareCall("begin ? := PCK_OBJETIVOS.GET_OBJETIVOS_USUARIO(?); end;");
	cs.registerOutParameter(1, OracleTypes.CURSOR);
	cs.setInt(2, (Integer) IdUsuario);
	cs.execute();
	ResultSet rs = (ResultSet) cs.getObject(1);
	if (rs.next()) {

			Objetivo obj = new Objetivo();
			obj.setIdObjetivo(rs.getInt("IDOBJETIVO"));
			obj.setNombre(rs.getString("NOMBRE"));
			obj.setFfinicio(rs.getString("FINICIO"));
			obj.setFfin(rs.getString("FFIN"));
			obj.setMonto(rs.getFloat("MONTO"));
			obj.setIdUsuario(rs.getInt("IDUSUARIO"));
	
		rs.close();
		return obj;
	}
	} catch (SQLException e) {

		e.printStackTrace();
	} finally {
		closeStatement();
	}
	return null;
}

}
